const user = require('../models/user')
const Sequelize = require('sequelize');
const Op = Sequelize.Op;

class userDao {
  // 创建
  static async create(v) {
    const res = await user.create(
      v
    )
    return res
  }
  // 通过账号找信息
  static async findByAccount(v) {
    const res = await user.findOne({
      where: {
        account: v.account
      },
    });
    return res
  }
  // 通过socketID找信息
  static async findBySocketID(v) {
    const res = await user.findOne({
      where: {
        socketID: v.socketID
      },
    });
    return res
  }
  // 获取单个用户信息
  static async findById(v) {
    const res = await user.findOne({
      where: {
        id: v.id
      },
      attributes: { exclude: ['password'] }
    });
    return res
  }
  // 获取所有用户信息
  static async findAll(v) {
    const res = await user.findAndCountAll({
      limit: v.limit,
      offset: v.offset
    })
    let result = {}
    result.data = res.rows;
    result.total = res.count;
    return result
  }
  // 获取所有医生信息
  static async findAllByRole(v) {
    const res = await user.findAll({
      where:{
        role:v
      }
    })
    return res
  }
  // 搜索用户 根据用户名 账号 医院查询(单参数多字段查询)
  static async getUserByField(v) {
    const res = await user.findAll({
      where: {
        [Op.or]: [{
          username: {
            [Op.like]: '%' + v + '%'
          }
        }, {
          account: {
            [Op.like]: '%' + v + '%'
          }
        }, {
          hospital: {
            [Op.like]: '%' + v + '%'
          }
        }]
      }
    });
    return res
  }
  // 更新数据
  static async upd(v) {
    const res = await user.update(v, {
      where: {
        id: v.id
      }
    })
    return res
  }
}

module.exports = userDao